package progetto.misure;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Cammini
{
	private Set<Cammino> cammini;


	// private double costoContainer;

	public Cammini()
	{
		cammini = new HashSet<Cammino>();
		// costoContainer = Double.POSITIVE_INFINITY;
	}


	public boolean addCammino(Cammino s)
	{
		return cammini.add(s);

	}
	
	public boolean addCammini(Cammini s)
	{
		
		
		return cammini.addAll(s.cammini);

	}


	public boolean removeCammino(Cammino s)
	{
		return cammini.remove(s);

	}


	public double getCostoCammini()
	{
		if (cammini.isEmpty())
			return Double.POSITIVE_INFINITY;
		Iterator<Cammino> it = cammini.iterator();
		return it.next().getCosto();
	}


	public static Cammini prodottoCartesiano(Cammini c1, Cammini c2)
	{
		Cammini pc = new Cammini();
		Set<Cammino> s1 = c1.cammini;
		Set<Cammino> s2 = c2.cammini;
		for (Iterator<Cammino> it1 = s1.iterator(); it1.hasNext();)
		{
			Cammino ca1 = it1.next();
			for (Iterator<Cammino> it2 = s2.iterator(); it2.hasNext();)
			{
				
				Cammino ca2 = it2.next();
				Cammino nuovo = new Cammino();
				for (int i : ca1.getNodi())
					nuovo.aggiungiNodo(i);
				for (int i : ca2.getNodi())
					nuovo.aggiungiNodo(i);
				pc.addCammino(nuovo);
			}
		}
		return pc;
	}


	public int getNumeroCammini()
	{

		return cammini.size();

	}


	@Override
	public String toString()
	{
		//return "(" + cammini.toString() + ", costo " + getCostoCammini() + ")";
		return "(" + cammini.toString()+ ")";
		// return "(Costo = " + costoContainer + cammini + ")";
	}


	public int getNumeroPresenzeNodoInCammini(int t)
	{
		int cont = 0;
		for (Iterator<Cammino> it = cammini.iterator(); it.hasNext();)
		{
			Cammino ca = it.next();
			if (ca.isPresentNodo(t))
				cont++;
		}
		return cont;
	}

}
